import App from './App'
import request from './common/request'
import subsRequest from './common/subsRequest'
import emotion from './common/emotion.js'
import url from './common/url.js'
import * as enums from './common/enums.js'
import * as date from './common/date'
import * as socketApi from './common/wssocket'
import * as messageType from './common/messageType'
import * as permission from './common/permission'
import * as badge from './common/badge'
import { createSSRApp } from 'vue'
import uviewPlus from '@/uni_modules/uview-plus'
import * as pinia from 'pinia'
import useChatStore from '@/store/chatStore.js'
import useFriendStore from '@/store/friendStore.js'
import useGroupStore from '@/store/groupStore.js'
import useConfigStore from '@/store/configStore.js'
import useUserStore from '@/store/userStore.js'
import barGroup from '@/components/bar/bar-group'
import arrowBar from '@/components/bar/arrow-bar'
import btnBar from '@/components/bar/btn-bar'
import switchBar from '@/components/bar/switch-bar'

// #ifdef H5
import * as recorder from './common/recorder-h5'
import ImageResize from 'quill-image-resize-mp'
import Quill from 'quill'
// 以下组件用于兼容部分手机聊天边框无法输入的问题
window.Quill = Quill
window.ImageResize = { default: ImageResize }
// 调试器
// import VConsole from 'vconsole'
// new VConsole()

// 过滤DOMNodeInserted相关的控制台警告
const originalWarn = console.warn
console.warn = function (...args) {
  const message = args.join(' ')
  if (message.includes('DOMNodeInserted') || message.includes('mutation event')) {
    return // 忽略DOMNodeInserted相关的警告
  }
  originalWarn.apply(console, args)
}

// #endif
// #ifndef H5
import * as recorder from './common/recorder-app'
// #endif

export function createApp() {
  const app = createSSRApp(App)
  app.use(uviewPlus)
  app.use(pinia.createPinia())
  app.component('bar-group', barGroup)
  app.component('arrow-bar', arrowBar)
  app.component('btn-bar', btnBar)
  app.component('switch-bar', switchBar)
  app.config.globalProperties.$http = request
  app.config.globalProperties.$subHttp = subsRequest
  app.config.globalProperties.$wsApi = socketApi
  app.config.globalProperties.$msgType = messageType
  app.config.globalProperties.$emo = emotion
  app.config.globalProperties.$url = url
  app.config.globalProperties.$enums = enums
  app.config.globalProperties.$date = date
  app.config.globalProperties.$rc = recorder
  app.config.globalProperties.$permission = permission
  app.config.globalProperties.$badge = badge

  // 初始化时再挂载store对象
  app.config.globalProperties.$mountStore = () => {
    app.config.globalProperties.chatStore = useChatStore()
    app.config.globalProperties.friendStore = useFriendStore()
    app.config.globalProperties.groupStore = useGroupStore()
    app.config.globalProperties.configStore = useConfigStore()
    app.config.globalProperties.userStore = useUserStore()
    // console.log("$mountStore")
  }
  return {
    app,
    pinia,
  }
}
